Digitally recorded sound must typically be input to and processed by a sound processor. The sound is typically input as a series of frames, each having some number of voices (e.g., 64), and each voice comprises some number of sound samples (e.g., 32). The sound processor typically processes each of the voices serially, although parallel processing is also done. In serial embodiments, the sound processor has a finite amount of time, called a voice time slot or voice channel in which to process each voice. The time slots are used independently to initiate and control the fetching, interpretation, and processing of sound data that will ultimately be heard through speakers. The sound processor uses each voice time slot to control how the voices in the input sound will be modified by certain effects during the data processing stage. Examples of effects applied to the voices commonly include gain envelopes, low frequency oscillator (or “LFO”) incorporation (as gain or pitch), and pitch envelopes. Typically, a software program instructs the sound processor on which effects to apply to the voices. Low-cost, low-power processor solutions limit which per-voice effects may be applied, which may leave the programmer to develop more complicated, more memory dependent/intensive solutions to process the voice(s) of an input sound. Even high-cost processor solutions have inherent limits on how much processing may be done on a voice. Because all of the voices have to be completed within a very specific amount of time (number of clock cycles), the options to design hardware that allows more effects to be applied to the voices is limited to either increasing the clock speed or increasing the amount of logic.
To illustrate the above, consider the example shown in FIG. 1, which shows a timing diagram of an example processor during the processing of an input sound. In this example, assume that the sound processor is capable of supporting an input sound having only four voices. Due to requirements imposed on the design, this system processes the four voices serially in four separate voice time slots 14a-14d. Voice 1 is processed during time slot 14a, voice 2 is processed during time slot 14b, and so on. All four voices are completed within the required time to send the modified final sound 16 out the speaker system.
In this example, the processor is limited to applying only one gain LFO to each voice in the corresponding time slots 14a-14d. For the input sound shown in this example, the programmer only needs to make use of two of the voices, voices 1 and 2 for this application. Voice 1's LFO 18a is programmed to be 1 khz while voice 2's LFO 18b is programmed to be 500 hz. Voices 3 and 4 are unused in this example. If the programmer wishes to apply more than one LFO to voice 2 (a 500 Hz and a 1 kHz), he is not able to instruct the sound processor to do so unless it supported more than one LFO application per voice. Continuing the example further, let us suppose the processor supported two LFO applications per voice; the programmer could then apply both frequencies to the voice. But if he wanted to supply a third, he would not be able to.
The problem can be looked at in a different way as well. Using the same example processor description presented above, imagine that the programmer wishes to apply a 1 kHz LFO to both voices 1 and 2. The same number of cycles is necessary to apply the LFO to voice 1 as is needed to apply it to voice 2. Therefore, to apply a single frequency LFO (which takes n cycles) to x number of voices requires x*n cycle overhead—that is a lot of waste to do the same thing x number of times. If the programmer could tap into the power of the unused channels, this waste could be eliminated. For low-power designs, a solution to this problem could make the design requirements more achievable. Methods of solving this problem are currently unknown.
Conventional methods for solving the problem of applying more effect options to a voice time slot than what is capable of the hardware requires the sound artist or programmer to provide additional pre-processed sound samples than what would be necessary had the sound processor been able to support additional effects. Using the first example above, if the programmer wanted to apply both a 1 kHz and 500 Hz gain LFO to the sound, the programmer would have to supply a pre-processed sound that has already been modified by either the 1 kHz LFO or the 500 Hz LFO and then instruct the processor to apply the remaining one.
There are several disadvantages of requiring the programmer to provide additional pre-processed voices. First, the solution requires more system memory to store more variants of pre-processed voices, and results in longer software development time to manage a larger number of input voices. In addition, the solution requires longer artistic development time due to having to pre-process more input sounds.
Accordingly, what is needed is an improved method and system for applying more effects to voices in an input sound than is capable of being supported by a sound processor. The present invention addresses such a need.